package com.btsi.contract;

import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.datatypes.*;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@SuppressWarnings("unchecked")
public class BTSIDAC extends Contract {
    public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b50612a0e806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063c3bc2e891161007c578063c3bc2e89146102e1578063cb1592e5146102f4578063dda33aac14610318578063de8f0c451461032b578063e985e9c51461033e578063f2fde38b1461038a57600080fd5b8063715018a6146102875780638129fc1c1461028f5780638da5cb5b14610297578063a22cb465146102a8578063a382a4d9146102bb578063b224b4e9146102ce57600080fd5b80632be92b25116101155780632be92b25146101e557806336b4e1cc14610208578063393e05211461021b57806342966c681461023e578063522dee7b1461025157806370a082311461027457600080fd5b8063081812fc14610152578063095ea7b3146101985780631108da2c146101ad57806318160ddd146101c05780631af716ba146101d2575b600080fd5b61017b610160366004612221565b6000908152606c60205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6101ab6101a6366004612256565b61039d565b005b6101ab6101bb36600461230e565b610500565b6066545b60405190815260200161018f565b6101ab6101e036600461239f565b610626565b6101f86101f3366004612221565b6106b0565b60405161018f949392919061245b565b6101ab610216366004612492565b610776565b61022e610229366004612256565b610800565b60405161018f94939291906124d4565b6101ab61024c366004612221565b61098c565b6101c461025f366004612221565b60009081526069602052604090206005015490565b6101c46102823660046124f9565b610a65565b6101ab610a85565b6101ab610af9565b6033546001600160a01b031661017b565b6101ab6102b636600461251b565b610b7e565b6101ab6102c9366004612557565b610c13565b6101ab6102dc3660046125a2565b610dde565b6101ab6102ef366004612221565b610f00565b610307610302366004612221565b610fe3565b60405161018f95949392919061260e565b6101ab610326366004612221565b611153565b6101ab610339366004612492565b611234565b61037a61034c36600461265b565b6001600160a01b039182166000908152606d6020908152604080832093909416825291909152205460ff1690565b604051901515815260200161018f565b6101ab6103983660046124f9565b6112b9565b6000818152606a60205260409020600101546001600160a01b0316331461040b5760405162461bcd60e51b815260206004820152601b60248201527f4441433a6f6e6c7920444143206f776e65722063616e2063616c6c000000000060448201526064015b60405180910390fd5b6000818152606a60205260409020600101546001600160a01b03838116911614156104485760405162461bcd60e51b81526004016104029061268e565b6000818152606a6020526040902060030154156104a75760405162461bcd60e51b815260206004820152601f60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e20617070726f7665006044820152606401610402565b6000818152606c602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a45050565b8261051d5760405162461bcd60e51b8152600401610402906126d3565b61057286868686600081811061053557610535612700565b6020029190910135905060005b6040519080825280601f01601f19166020018201604052801561056c576020820181803683370190505b506113a4565b6105db5760405162461bcd60e51b815260206004820152603460248201527f4441433a63616e74206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610402565b60005b8381101561061d5761060b87878787858181106105fd576105fd612700565b905060200201358686611454565b806106158161272c565b9150506105de565b50505050505050565b6106338585856000610542565b61069c5760405162461bcd60e51b815260206004820152603460248201527f4441433a2063616e206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610402565b6106a98585858585611454565b5050505050565b6000818152606a60205260409020600181015460028201546003830154600490930180546001600160a01b03909316939192606091906106ef90612747565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90612747565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b505050505090509193509193565b6033546001600160a01b031633146107a05760405162461bcd60e51b815260040161040290612782565b806107bd5760405162461bcd60e51b8152600401610402906126d3565b60005b818110156107fb576107e98383838181106107dd576107dd612700565b90506020020135611659565b806107f38161272c565b9150506107c0565b505050565b60008060006060600085116108575760405162461bcd60e51b815260206004820152601d60248201527f4441433a696e646578206d7573742067726561746572207468616e20300000006044820152606401610402565b6108836108656001876127b7565b6001600160a01b0388166000908152606b60205260409020906116bd565b9350600084116108d55760405162461bcd60e51b815260206004820152601860248201527f4441433a6e6f20444143206174207468697320696e64657800000000000000006044820152606401610402565b6000848152606a60205260409020600281015460038201546004909201805491955091935061090390612747565b80601f016020809104026020016040519081016040528092919081815260200182805461092f90612747565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905092959194509250565b61099581611743565b61099f3382611794565b6109bb5760405162461bcd60e51b8152600401610402906127ce565b6000818152606a602052604090206003015415610a1a5760405162461bcd60e51b815260206004820152601c60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e206275726e000000006044820152606401610402565b6000818152606a60209081526040808320600201548352606990915290206003015415610a595760405162461bcd60e51b81526004016104029061281b565b610a628161180e565b50565b6001600160a01b0381166000908152606b60205260408120545b92915050565b6033546001600160a01b03163314610aaf5760405162461bcd60e51b815260040161040290612782565b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff1680610b0e5750303b155b80610b1c575060005460ff16155b610b385760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff16158015610b5a576000805461ffff19166101011790555b610b6261192a565b610b6a61199b565b8015610a62576000805461ff001916905550565b336001600160a01b0383161415610ba75760405162461bcd60e51b81526004016104029061268e565b336000818152606d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c1c85611ad7565b6000858152606960205260409020600201546001600160a01b03163314610c855760405162461bcd60e51b815260206004820181905260248201527f4441433a6f6e6c792063617465676f7279206f776e65722063616e206d696e746044820152606401610402565b60008581526069602052604090206003015415610cf85760405162461bcd60e51b815260206004820152602b60248201527f4441433a6f6e6c792063617465676f727920737461747573206973206e6f726d60448201526a185b0818d85b881b5a5b9d60aa1b6064820152608401610402565b60008411610d575760405162461bcd60e51b815260206004820152602660248201527f4441433a6d696e7420616d6f756e74206d7573742067726561746572207468616044820152656e207a65726f60d01b6064820152608401610402565b6001600160a01b038316610dad5760405162461bcd60e51b815260206004820181905260248201527f4441433a63616e206e6f74206d696e7420746f207a65726f20616464726573736044820152606401610402565b60005b84811015610dd657610dc484878585611b32565b80610dce8161272c565b915050610db0565b505050505050565b610e306040518060200160405280600081525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611d209050565b15610e875760405162461bcd60e51b815260206004820152602160248201527f4441433a63617465676f72794e616d652063616e206e6f7420626520656d70746044820152607960f81b6064820152608401610402565b610efa84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f88018190048102820181019092528681529250869150859081908401838280828437600092019190915250611d8392505050565b50505050565b6033546001600160a01b03163314610f2a5760405162461bcd60e51b815260040161040290612782565b610f3381611ad7565b600160008281526069602052604090206003015414610fa25760405162461bcd60e51b815260206004820152602560248201527f4441433a6f6e6c7920667265657a652063617465676f72792063616e20756e666044820152647265657a6560d81b6064820152608401610402565b60008181526069602052604080822060030182905551829133917feb6b2da67215e2caf27a509101b43cb08be5a3b43751050470bb9afc84d70bee9190","a350565b600081815260696020526040812080546001909101805491926060929091829184919061100f90612747565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90612747565b80156110885780601f1061105d57610100808354040283529160200191611088565b820191906000526020600020905b81548152906001019060200180831161106b57829003601f168201915b505050600089815260696020526040902060028101546003820154600490920180549599506001600160a01b039091169750909550926110ca92509050612747565b80601f01602080910402602001604051908101604052809291908181526020018280546110f690612747565b80156111435780601f1061111857610100808354040283529160200191611143565b820191906000526020600020905b81548152906001019060200180831161112657829003601f168201915b5050505050905091939590929450565b6033546001600160a01b0316331461117d5760405162461bcd60e51b815260040161040290612782565b61118681611ad7565b600081815260696020526040902060030154156111f15760405162461bcd60e51b815260206004820152602360248201527f4441433a6f6e6c79206e6f726d616c2063617465676f72792063616e20667265604482015262657a6560e81b6064820152608401610402565b600081815260696020526040808220600160039091015551829133917fa1915ae18772574067eca1dad2f4a140f527099158837098cd7f215540f9210c9190a350565b6033546001600160a01b0316331461125e5760405162461bcd60e51b815260040161040290612782565b8061127b5760405162461bcd60e51b8152600401610402906126d3565b60005b818110156107fb576112a783838381811061129b5761129b612700565b90506020020135611eb8565b806112b18161272c565b91505061127e565b6033546001600160a01b031633146112e35760405162461bcd60e51b815260040161040290612782565b6001600160a01b0381166113485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610402565b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0384163b6113bd5750600161144c565b60405163345eac7560e11b81526000906001600160a01b038616906368bd58ea906113f29089908990899089906004016128aa565b6020604051808303816000875af1158015611411573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143591906128dd565b6001600160e01b03191663345eac7560e11b149150505b949350505050565b61145e3384611794565b61147a5760405162461bcd60e51b8152600401610402906127ce565b6001600160a01b0384166114e15760405162461bcd60e51b815260206004820152602860248201527f4441433a63616e206e6f74207472616e7366657220746f20746865207a65726f604482015267206164647265737360c01b6064820152608401610402565b6000838152606a602052604081206002015490600082815260696020526040902060030154146115235760405162461bcd60e51b81526004016104029061281b565b6000848152606a6020526040902060030154156115825760405162461bcd60e51b815260206004820152601c60248201527f4441433a44414320737461747573206973206e6f74206e6f726d616c000000006044820152606401610402565b6000848152606c6020908152604080832080546001600160a01b03191690556001600160a01b0389168352606b90915290206115be9085611f1a565b506001600160a01b0385166000908152606b602052604090206115e1908561200d565b506000848152606a60205260409081902060010180546001600160a01b0319166001600160a01b0388811691821790925591518692918916907fcd6e659e4c2e75c3bfe47fecaccf39aeb368116a0ee52afb532e07f6cba6c0d1906116499088908890612930565b60405180910390a4505050505050565b61166281611743565b60016000828152606a60205260409020600301541415610a62576000818152606a602052604080822060030182905551829133917f4f62fd67e16073ab460b98757109cbc324979c3a733d58599c06d0dea0bf72959190a350565b8154600090821061171b5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610402565b82600001828154811061173057611730612700565b9060005260206000200154905092915050565b6000818152606a6020526040902054610a625760405162461bcd60e51b8152602060048201526013602482015272111050ce911050d251081b9bdd08195e1a5cdd606a1b6044820152606401610402565b6000818152606a60205260408120600101546001600160a01b039081169084168114806117e657506001600160a01b038082166000908152606d602090815260408083209388168352929052205460ff165b8061144c575050506000908152606c60205260409020546001600160a01b0390811691161490565b6000818152606a6020908152604080832060010154606c835281842080546001600160a01b03191690556001600160a01b0316808452606b90925282209091906118589084611f1a565b506001600160a01b0381166000908152606b6020526040902061187b908461200d565b506000838152606a602090815260408083206001810180546001600160a01b0319166001600160a01b03878116918217909255600260039093019290925582518481529384019490945286939092908616917fcd6e659e4c2e75c3bfe47fecaccf39aeb368116a0ee52afb532e07f6cba6c0d1910160405180910390a4604051839033907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590600090a3505050565b600054610100900460ff168061193f5750303b155b8061194d575060005460ff16155b6119695760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff1615801561198b576000805461ffff19166101011790555b61199361205c565b610b6a6120d0565b600054610100900460ff16806119b05750303b155b806119be575060005460ff16155b6119da5760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff161580156119fc576000805461ffff19166101011790555b60675415611a5d5760405162461bcd60e51b815260206004820152602860248201527f4441433a5f63757272656e7443617465676f72794944206e6f7420657175616c60448201526720746f207a65726f60c01b6064820152608401610402565b60685415611ab95760405162461bcd60e51b815260206004820152602360248201527f4441433a5f63757272656e744441434944206e6f7420657175616c20746f207a60448201526265726f60e81b6064820152608401610402565b600160678190556068558015610a62576000805461ff001916905550565b600081815260696020526040902054610a625760405162461bcd60e51b815260206004820152601b60248201527f4441433a63617465676f727920646f6573206e6f7420657869737400000000006044820152606401610402565b6068546040805160a0810182528281526001600160a01b03871660208201529081018590526000906060810182815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152606a602090815260409182902084518155848201516001820180546001600160a01b0319166001600160a01b0390921691909117905591840151600283015560608401516003830155608084015180519495508594929350611c0a9260048501929190910190612188565b50905050600160666000828254611c219190612944565b92505081905550600160686000828254611c3b9190612944565b90915550506000858152606960205260408120600501805460019290611c62908490612944565b90915550506001600160a01b0386166000908152606b60205260409020611c89908361200d565b508185336001600160a01b03167fad2943b15836caf43698401a62af4738985fb33dd979844d99d37f5293f037d3898888604051611cc99392919061295c565b60405180910390a481866001600160a01b031660006001600160a01b03167fcd6e659e4c2e75c3bfe47fecaccf39aeb368116a0ee52afb532e07f6cba6c0d160405161164990602080825260009082015260400190565b60008083604051602001611d34919061298a565b604051602081830303815290604052805190602001209050600083604051602001611d5f919061298a565b60408051601f19818403018152919052805160209091012091909114949350505050565b6067546040805160c081018252828152602080820186815233838501526000606084018190526080840187905260a0840181905285815260698352939093208251815592518051929384939092611de1926001850192910190612188565b5060408201516002820180546001600160a01b0319166001600160a01b039092169190911790556060820151600382015560808201518051611e2d916004840191602090910190612188565b5060a08201518160050155905050600160656000828254611e4e9190612944565b92505081905550600160676000828254611e689190612944565b90915550829050336001600160a01b03167fbbd0f597c37492a2f99254aa1196162b48f8d540b71a34ec8e8bac6cf947c01d8686604051611eaa92919061299d565b60405180910390a350505050565b611ec181611743565b6000818152606a6020526040902060030154610a62576000818152606a6020526040808220600160039091015551829133917f48ed2ee6a85ff2f69d20b4f95843ad08ebc40e6d1ad525065ec7e8390fb495c49190a350565b60008181526001830160205260408120548015612003576000611f3e6001836127b7565b8554909150600090611f52906001906127b7565b90506000866000018281548110611f6b57611f6b612700565b9060005260206000200154905080876000018481548110611f8e57611f8e612700565b600091825260209091200155611fa5836001612944565b60008281526001890160205260409020558654879080611fc757611fc76129c2565b600190038181906000526020600020016000905590558660","01016000878152602001908152602001600020600090556001945050505050610a7f565b6000915050610a7f565b600081815260018301602052604081205461205457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a7f565b506000610a7f565b600054610100900460ff16806120715750303b155b8061207f575060005460ff16155b61209b5760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff16158015610b6a576000805461ffff19166101011790558015610a62576000805461ff001916905550565b600054610100900460ff16806120e55750303b155b806120f3575060005460ff16155b61210f5760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff16158015612131576000805461ffff19166101011790555b603380546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a62576000805461ff001916905550565b82805461219490612747565b90600052602060002090601f0160209004810192826121b657600085556121fc565b82601f106121cf57805160ff19168380011785556121fc565b828001600101855582156121fc579182015b828111156121fc5782518255916020019190600101906121e1565b5061220892915061220c565b5090565b5b80821115612208576000815560010161220d565b60006020828403121561223357600080fd5b5035919050565b80356001600160a01b038116811461225157600080fd5b919050565b6000806040838503121561226957600080fd5b6122728361223a565b946020939093013593505050565b60008083601f84011261229257600080fd5b50813567ffffffffffffffff8111156122aa57600080fd5b6020830191508360208260051b85010111156122c557600080fd5b9250929050565b60008083601f8401126122de57600080fd5b50813567ffffffffffffffff8111156122f657600080fd5b6020830191508360208285010111156122c557600080fd5b6000806000806000806080878903121561232757600080fd5b6123308761223a565b955061233e6020880161223a565b9450604087013567ffffffffffffffff8082111561235b57600080fd5b6123678a838b01612280565b9096509450606089013591508082111561238057600080fd5b5061238d89828a016122cc565b979a9699509497509295939492505050565b6000806000806000608086880312156123b757600080fd5b6123c08661223a565b94506123ce6020870161223a565b935060408601359250606086013567ffffffffffffffff8111156123f157600080fd5b6123fd888289016122cc565b969995985093965092949392505050565b6000815180845260005b8181101561243457602081850181015186830182015201612418565b81811115612446576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0385168152836020820152826040820152608060608201526000612488608083018461240e565b9695505050505050565b600080602083850312156124a557600080fd5b823567ffffffffffffffff8111156124bc57600080fd5b6124c885828601612280565b90969095509350505050565b848152836020820152826040820152608060608201526000612488608083018461240e565b60006020828403121561250b57600080fd5b6125148261223a565b9392505050565b6000806040838503121561252e57600080fd5b6125378361223a565b91506020830135801515811461254c57600080fd5b809150509250929050565b60008060008060006080868803121561256f57600080fd5b85359450602086013593506125866040870161223a565b9250606086013567ffffffffffffffff8111156123f157600080fd5b600080600080604085870312156125b857600080fd5b843567ffffffffffffffff808211156125d057600080fd5b6125dc888389016122cc565b909650945060208701359150808211156125f557600080fd5b50612602878288016122cc565b95989497509550505050565b85815260a06020820152600061262760a083018761240e565b6001600160a01b038616604084015260608301859052828103608084015261264f818561240e565b98975050505050505050565b6000806040838503121561266e57600080fd5b6126778361223a565b91506126856020840161223a565b90509250929050565b60208082526025908201527f4441433a63616e206e6f7420617070726f76616c20746f2063757272656e742060408201526437bbb732b960d91b606082015260800190565b6020808252601390820152724441433a44414349447320697320656d70747960681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561274057612740612716565b5060010190565b600181811c9082168061275b57607f821691505b6020821081141561277c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000828210156127c9576127c9612716565b500390565b6020808252602d908201527f4441433a63616c6c6572206973206e6f742074686520746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526021908201527f4441433a63617465676f727920737461747573206973206e6f74206e6f726d616040820152601b60fa1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124889083018461240e565b6000602082840312156128ef57600080fd5b81516001600160e01b03198116811461251457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600061144c602083018486612907565b6000821982111561295757612957612716565b500190565b6001600160a01b03841681526040602082018190526000906129819083018486612907565b95945050505050565b602081526000612514602083018461240e565b6040815260006129b0604083018561240e565b8281036020840152612981818561240e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cec978d6621a16320692901595424021f1b9a3e4e435ae801ca8c9b92b3a5bd864736f6c634300080b0033"};

    public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b50612a40806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80635089e2c8116100c3578063ca97c9b61161007c578063ca97c9b6146102f3578063cc8be70e14610316578063d86e29e214610329578063deca7fb714610331578063ea605f3d14610355578063ffd89b6f1461035d57600080fd5b80635089e2c814610259578063918268151461027e57806392ec0cdd146102915780639b08e7f8146102a45780639cb97a52146102b7578063b61b2b39146102e057600080fd5b80632ffdc5f8116101155780632ffdc5f8146101c7578063391edc16146101da5780633b3987fe146101ed5780633e5a304c14610200578063441f819c146102235780634c00105f1461023657600080fd5b80630256e2781461015257806304ddbcf21461016957806316cad12a1461017e5780631f2d486014610191578063286806cc146101a4575b600080fd5b6066545b6040519081526020015b60405180910390f35b61017c61017736600461229f565b610370565b005b61017c61018c3660046122fd565b610405565b61017c61019f36600461231f565b6104f2565b6101b76101b2366004612349565b610653565b60405161016094939291906123af565b61017c6101d53660046123e6565b610719565b61017c6101e8366004612349565b6107af565b61017c6101fb36600461229f565b61088b565b61015661020e366004612349565b60009081526069602052604090206005015490565b61017c610231366004612464565b610912565b6102496102443660046124d0565b610a35565b6040519015158152602001610160565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610160565b61017c61028c366004612503565b610a65565b61017c61029f366004612349565b610b8d565b61017c6102b2366004612594565b610c72565b6102666102c5366004612349565b6000908152606c60205260409020546001600160a01b031690565b61017c6102ee366004612349565b610cfd565b61030661030136600461231f565b610de0565b6040516101609493929190612603565b6101566103243660046122fd565b610f6e565b61017c610f8c565b61034461033f366004612349565b611001565b604051610160959493929190612628565b61017c611171565b61017c61036b366004612675565b6111f7565b6033546001600160a01b031633146103a457604051636381e58960e11b815260040161039b906126c0565b60405180910390fd5b806103c257604051636381e58960e11b815260040161039b906126f5565b60005b81811015610400576103ee8383838181106103e2576103e2612722565b905060200201356113c6565b806103f88161274e565b9150506103c5565b505050565b6033546001600160a01b0316331461043057604051636381e58960e11b815260040161039b906126c0565b6001600160a01b03811661049657604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039b565b6033546040516001600160a01b038084169216907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152606a60205260409020600101546001600160a01b0316331461055c57604051636381e58960e11b815260206004820152601b60248201527f4441433a6f6e6c7920444143206f776e65722063616e2063616c6c0000000000604482015260640161039b565b6000818152606a60205260409020600101546001600160a01b038381169116141561059a57604051636381e58960e11b815260040161039b90612769565b6000818152606a6020526040902060030154156105fa57604051636381e58960e11b815260206004820152601f60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e20617070726f766500604482015260640161039b565b6000818152606c602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839233917fd1e45707b3f71c77903b61f04c900f772db264b9bf618f1cc3308fb516eb61699190a45050565b6000818152606a60205260409020600181015460028201546003830154600490930180546001600160a01b0390931693919260609190610692906127ae565b80601f01602080910402602001604051908101604052809291908181526020018280546106be906127ae565b801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b505050505090509193509193565b336001600160a01b038316141561074357604051636381e58960e11b815260040161039b90612769565b336000818152606d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f34cc9ec6b85c217ac6bd5f7b86411e4e4e40d816d5d17725c4dec1f0901d9074910160405180910390a35050565b6107b88161142a565b6107c2338261147c565b6107df57604051636381e58960e11b815260040161039b906127e9565b6000818152606a60205260409020600301541561083f57604051636381e58960e11b815260206004820152601c60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e206275726e00000000604482015260640161039b565b6000818152606a6020908152604080832060020154835260699091529020600301541561087f57604051636381e58960e11b815260040161039b90612836565b610888816114fa565b50565b6033546001600160a01b031633146108b657604051636381e58960e11b815260040161039b906126c0565b806108d457604051636381e58960e11b815260040161039b906126f5565b60005b81811015610400576109008383838181106108f4576108f4612722565b90506020020135611616565b8061090a8161274e565b9150506108d7565b6109646040518060200160405280600081525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116789050565b156109bc57604051636381e58960e11b815260206004820152602160248201527f4441433a63617465676f72794e616d652063616e206e6f7420626520656d70746044820152607960f81b606482015260840161039b565b610a2f84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815292508691508590819084018382808284376000920191909152506116db92505050565b50505050565b6001600160a01b038083166000908152606d602090815260408083209385168352929052205460ff165b92915050565b82610a8357604051636381e58960e11b815260040161039b906126f5565b610ad8868686866000818110610a9b57610a9b612722565b6020029190910135905060005b6040519080825280601f01601f191660200182016040528015610ad2576020820181803683370190505b50611810565b610b4257604051636381e58960e11b815260206004820152603460248201527f4441433a63616e74206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b60005b83811015610b8457610b728787878785818110610b6457610b64612722565b9050602002013586866118bf565b80610b7c8161274e565b915050610b45565b50505050505050565b6033546001600160a01b03163314610bb857604051636381e58960e11b815260040161039b906126c0565b610bc181611ac8565b600160008281526069602052604090206003015414610c3157604051636381e58960e11b815260206004820152602560248201527f4441433a6f6e6c7920667265657a652063617465676f72792063616e20756e666044820152647265657a6560d81b606482015260840161039b565b60008181526069602052604080822060030182905551829133917f8171c3e7cd97b6ad5e189e7564be1f3291b03d6802b0eac2293636e8277f0e319190a350565b610c7f8585856000610aa8565b610ce957604051636381e58960e11b815260206004820152603460248201527f4441433a2063616e206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b610cf685858585856118bf565b5050505050565b6033546001600160a01b03163314610d2857604051636381e58960e11b815260040161039b906126c0565b610d3181611ac8565b60008181526069602052604090206003015415610d9d57604051636381e58960e11b815260206004820152602360248201527f4441433a6f6e6c79206e6f726d616c2063617465676f72792063616e20667265604482015262657a6560e81b606482015260840161039b565b600081815260696020526040808220600160039091015551829133917f6790b7a7222403863d6359169e1769717ae3d64801f03a6b9433bcea146d1c839190a350565b6000806000606060008511610e3857604051636381e58960e11b815260206004820152601d60248201527f4441433a696e646578206d7573742067726561746572207468616e2030000000604482015260640161039b565b610e64610e46600187612877565b6001600160a01b0388166000908152606b6020526040902090611b24565b935060008411610eb757604051636381e58960e11b815260206004820152601860248201527f4441433a6e6f20444143206174207468697320696e6465780000000000000000604482015260640161039b565b6000848152606a602052604090206002810154600382015460049092018054919550919350610ee5906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610f11906127ae565b8015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905092959194509250565b6001600160a01b0381166000908152606b6020526040812054610a5f565b6033546001600160a01b03163314610fb757604051636381e58960e11b815260040161039b906126c0565b6033546040516000916001600160a01b0316907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb","0fcf218f81b86a1c036e47d0908390a3603380546001600160a01b0319169055565b600081815260696020526040812080546001909101805491926060929091829184919061102d906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611059906127ae565b80156110a65780601f1061107b576101008083540402835291602001916110a6565b820191906000526020600020905b81548152906001019060200180831161108957829003601f168201915b505050600089815260696020526040902060028101546003820154600490920180549599506001600160a01b039091169750909550926110e8925090506127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611114906127ae565b80156111615780601f1061113657610100808354040283529160200191611161565b820191906000526020600020905b81548152906001019060200180831161114457829003601f168201915b5050505050905091939590929450565b600054610100900460ff16806111865750303b155b80611194575060005460ff16155b6111b157604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff161580156111d3576000805461ffff19166101011790555b6111db611bab565b6111e3611c1d565b8015610888576000805461ff001916905550565b61120085611ac8565b6000858152606960205260409020600201546001600160a01b0316331461126a57604051636381e58960e11b815260206004820181905260248201527f4441433a6f6e6c792063617465676f7279206f776e65722063616e206d696e74604482015260640161039b565b600085815260696020526040902060030154156112de57604051636381e58960e11b815260206004820152602b60248201527f4441433a6f6e6c792063617465676f727920737461747573206973206e6f726d60448201526a185b0818d85b881b5a5b9d60aa1b606482015260840161039b565b6000841161133e57604051636381e58960e11b815260206004820152602660248201527f4441433a6d696e7420616d6f756e74206d7573742067726561746572207468616044820152656e207a65726f60d01b606482015260840161039b565b6001600160a01b03831661139557604051636381e58960e11b815260206004820181905260248201527f4441433a63616e206e6f74206d696e7420746f207a65726f2061646472657373604482015260640161039b565b60005b848110156113be576113ac84878585611d5c565b806113b68161274e565b915050611398565b505050505050565b6113cf8161142a565b60016000828152606a60205260409020600301541415610888576000818152606a602052604080822060030182905551829133917f7fc84bbf5f6aa9afb4daed41edce6598ddc95f8dd2c17399ab3bf775c637d89d9190a350565b6000818152606a602052604090205461088857604051636381e58960e11b8152602060048201526013602482015272111050ce911050d251081b9bdd08195e1a5cdd606a1b604482015260640161039b565b6000818152606a60205260408120600101546001600160a01b039081169084168114806114ce57506001600160a01b038082166000908152606d602090815260408083209388168352929052205460ff165b806114f257506000838152606c60205260409020546001600160a01b038581169116145b949350505050565b6000818152606a6020908152604080832060010154606c835281842080546001600160a01b03191690556001600160a01b0316808452606b90925282209091906115449084611f4a565b506001600160a01b0381166000908152606b60205260409020611567908461203d565b506000838152606a602090815260408083206001810180546001600160a01b0319166001600160a01b03878116918217909255600260039093019290925582518481529384019490945286939092908616917f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a705910160405180910390a4604051839033907fc5cfb20a182ba4b800686ac3d941ef8a395ec1bbf151ed8db9b9daec7a67f9e790600090a3505050565b61161f8161142a565b6000818152606a6020526040902060030154610888576000818152606a6020526040808220600160039091015551829133917f97b179d991379a1ceca6ea8271f229aaa1ee8dd74df21f9236c5379df138f42e9190a350565b6000808360405160200161168c91906128dc565b6040516020818303038152906040528051906020012090506000836040516020016116b791906128dc565b60408051601f19818403018152919052805160209091012091909114949350505050565b6067546040805160c081018252828152602080820186815233838501526000606084018190526080840187905260a08401819052858152606983529390932082518155925180519293849390926117399260018501929101906121ba565b5060408201516002820180546001600160a01b0319166001600160a01b0390921691909117905560608201516003820155608082015180516117859160048401916020909101906121ba565b5060a082015181600501559050506001606560008282546117a691906128ef565b925050819055506001606760008282546117c091906128ef565b90915550829050336001600160a01b03167f9fcb3fde540f1319bf07575fe9913e34b82a0ed274f00ffa218e9bb779b68ed28686604051611802929190612907565b60405180910390a350505050565b60006001600160a01b0384163b611829575060016114f2565b604051637e8c1fc960e11b81526000906001600160a01b0386169063fd183f929061185e908990899089908990600401612935565b6020604051808303816000875af115801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a19190612968565b6001600160e01b031916637e8c1fc960e11b14915050949350505050565b6118c9338461147c565b6118e657604051636381e58960e11b815260040161039b906127e9565b6001600160a01b03841661194e57604051636381e58960e11b815260206004820152602860248201527f4441433a63616e206e6f74207472616e7366657220746f20746865207a65726f604482015267206164647265737360c01b606482015260840161039b565b6000838152606a6020526040812060020154906000828152606960205260409020600301541461199157604051636381e58960e11b815260040161039b90612836565b6000848152606a6020526040902060030154156119f157604051636381e58960e11b815260206004820152601c60248201527f4441433a44414320737461747573206973206e6f74206e6f726d616c00000000604482015260640161039b565b6000848152606c6020908152604080832080546001600160a01b03191690556001600160a01b0389168352606b9091529020611a2d9085611f4a565b506001600160a01b0385166000908152606b60205260409020611a50908561203d565b506000848152606a60205260409081902060010180546001600160a01b0319166001600160a01b0388811691821790925591518692918916907f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a70590611ab890889088906129bb565b60405180910390a4505050505050565b60008181526069602052604090205461088857604051636381e58960e11b815260206004820152601b60248201527f4441433a63617465676f727920646f6573206e6f742065786973740000000000604482015260640161039b565b81546000908210611b8357604051636381e58960e11b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161039b565b826000018281548110611b9857611b98612722565b9060005260206000200154905092915050565b600054610100900460ff1680611bc05750303b155b80611bce575060005460ff16155b611beb57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015611c0d576000805461ffff19166101011790555b611c1561208c565b6111e3612101565b600054610100900460ff1680611c325750303b155b80611c40575060005460ff16155b611c5d57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015611c7f576000805461ffff19166101011790555b60675415611ce157604051636381e58960e11b815260206004820152602860248201527f4441433a5f63757272656e7443617465676f72794944206e6f7420657175616c60448201526720746f207a65726f60c01b606482015260840161039b565b60685415611d3e57604051636381e58960e11b815260206004820152602360248201527f4441433a5f63757272656e744441434944206e6f7420657175616c20746f207a60448201526265726f60e81b606482015260840161039b565b600160678190556068558015610888576000805461ff001916905550565b6068546040805160a0810182528281526001600160a01b03871660208201529081018590526000906060810182815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152606a602090815260409182902084518155848201516001820180546001600160a01b0319166001600160a01b0390921691909117905591840151600283015560608401516003830155608084015180519495508594929350611e3492600485019291909101906121ba565b50905050600160666000828254611e4b91906128ef565b92505081905550600160686000828254611e6591906128ef565b90915550506000858152606960205260408120600501805460019290611e8c9084906128ef565b90915550506001600160a01b0386166000908152606b60205260409020611eb3908361203d565b508185336001600160a01b03167fbaa9ce3c5df106e294a8517fe62aa9525a79ef0db04efe8d2758f89cd585f6d7898888604051611ef3939291906129cf565b60405180910390a481866001600160a01b031660006001600160a01b03167f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a705604051611ab890602080825260009082015260400190565b60008181526001830160205260408120548015612033576000611f6e600183612877565b8554909150600090611f8290600190612877565b90506000866000018281548110611f9b57611f9b612722565b9060005260206000200154905080876000018481548110611fbe57611fbe612722565b600091825260209091200155611fd58360016128ef565b60008281526001890160","205260409020558654879080611ff757611ff76129f4565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610a5f565b6000915050610a5f565b600081815260018301602052604081205461208457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a5f565b506000610a5f565b600054610100900460ff16806120a15750303b155b806120af575060005460ff16155b6120cc57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff161580156111e3576000805461ffff19166101011790558015610888576000805461ff001916905550565b600054610100900460ff16806121165750303b155b80612124575060005460ff16155b61214157604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015612163576000805461ffff19166101011790555b603380546001600160a01b0319163390811790915560405181906000907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908290a3508015610888576000805461ff001916905550565b8280546121c6906127ae565b90600052602060002090601f0160209004810192826121e8576000855561222e565b82601f1061220157805160ff191683800117855561222e565b8280016001018555821561222e579182015b8281111561222e578251825591602001919060010190612213565b5061223a92915061223e565b5090565b5b8082111561223a576000815560010161223f565b60008083601f84011261226557600080fd5b50813567ffffffffffffffff81111561227d57600080fd5b6020830191508360208260051b850101111561229857600080fd5b9250929050565b600080602083850312156122b257600080fd5b823567ffffffffffffffff8111156122c957600080fd5b6122d585828601612253565b90969095509350505050565b80356001600160a01b03811681146122f857600080fd5b919050565b60006020828403121561230f57600080fd5b612318826122e1565b9392505050565b6000806040838503121561233257600080fd5b61233b836122e1565b946020939093013593505050565b60006020828403121561235b57600080fd5b5035919050565b6000815180845260005b818110156123885760208185018101518683018201520161236c565b8181111561239a576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b03851681528360208201528260408201526080606082015260006123dc6080830184612362565b9695505050505050565b600080604083850312156123f957600080fd5b612402836122e1565b91506020830135801515811461241757600080fd5b809150509250929050565b60008083601f84011261243457600080fd5b50813567ffffffffffffffff81111561244c57600080fd5b60208301915083602082850101111561229857600080fd5b6000806000806040858703121561247a57600080fd5b843567ffffffffffffffff8082111561249257600080fd5b61249e88838901612422565b909650945060208701359150808211156124b757600080fd5b506124c487828801612422565b95989497509550505050565b600080604083850312156124e357600080fd5b6124ec836122e1565b91506124fa602084016122e1565b90509250929050565b6000806000806000806080878903121561251c57600080fd5b612525876122e1565b9550612533602088016122e1565b9450604087013567ffffffffffffffff8082111561255057600080fd5b61255c8a838b01612253565b9096509450606089013591508082111561257557600080fd5b5061258289828a01612422565b979a9699509497509295939492505050565b6000806000806000608086880312156125ac57600080fd5b6125b5866122e1565b94506125c3602087016122e1565b935060408601359250606086013567ffffffffffffffff8111156125e657600080fd5b6125f288828901612422565b969995985093965092949392505050565b8481528360208201528260408201526080606082015260006123dc6080830184612362565b85815260a06020820152600061264160a0830187612362565b6001600160a01b03861660408401526060830185905282810360808401526126698185612362565b98975050505050505050565b60008060008060006080868803121561268d57600080fd5b85359450602086013593506126a4604087016122e1565b9250606086013567ffffffffffffffff8111156125e657600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152724441433a44414349447320697320656d70747960681b604082015260600190565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b600060001982141561276257612762612738565b5060010190565b60208082526025908201527f4441433a63616e206e6f7420617070726f76616c20746f2063757272656e742060408201526437bbb732b960d91b606082015260800190565b600181811c908216806127c257607f821691505b602082108114156127e35763b95aa35560e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4441433a63616c6c6572206973206e6f742074686520746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526021908201527f4441433a63617465676f727920737461747573206973206e6f74206e6f726d616040820152601b60fa1b606082015260800190565b60008282101561288957612889612738565b500390565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020815260006123186020830184612362565b6000821982111561290257612902612738565b500190565b60408152600061291a6040830185612362565b828103602084015261292c8185612362565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123dc90830184612362565b60006020828403121561297a57600080fd5b81516001600160e01b03198116811461231857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006114f2602083018486612992565b6001600160a01b038416815260406020820181905260009061292c9083018486612992565b63b95aa35560e01b600052603160045260246000fdfea26469706673582212203e17e48e94786a4ec34a71624da25d5e610b07093675491b9bf9b85bc72d6fa364736f6c634300080b0033"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isApproval\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"categoryName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"name\":\"CreateCategory\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"FreezeCategory\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"FreezeDAC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"UnfreezeCategory\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"UnfreezeDAC\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"categoryName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"name\":\"createCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"freezeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"DACIDs\",\"type\":\"uint256[]\"}],\"name\":\"freezeDAC\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getDACByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"queryCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"categoryName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"queryDAC\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isApproval\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"totalSupplyOfCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"DACIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"transferFromBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"unfreezeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}",",{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"DACIDs\",\"type\":\"uint256[]\"}],\"name\":\"unfreezeDAC\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_APPROVE = "approve";

    public static final String FUNC_BALANCEOF = "balanceOf";

    public static final String FUNC_BURN = "burn";

    public static final String FUNC_CREATECATEGORY = "createCategory";

    public static final String FUNC_FREEZECATEGORY = "freezeCategory";

    public static final String FUNC_FREEZEDAC = "freezeDAC";

    public static final String FUNC_GETAPPROVED = "getApproved";

    public static final String FUNC_GETDACBYINDEX = "getDACByIndex";

    public static final String FUNC_INITIALIZE = "initialize";

    public static final String FUNC_ISAPPROVEDFORALL = "isApprovedForAll";

    public static final String FUNC_MINT = "mint";

    public static final String FUNC_OWNER = "owner";

    public static final String FUNC_QUERYCATEGORY = "queryCategory";

    public static final String FUNC_QUERYDAC = "queryDAC";

    public static final String FUNC_RENOUNCEOWNERSHIP = "renounceOwnership";

    public static final String FUNC_SETAPPROVALFORALL = "setApprovalForAll";

    public static final String FUNC_TOTALSUPPLY = "totalSupply";

    public static final String FUNC_TOTALSUPPLYOFCATEGORY = "totalSupplyOfCategory";

    public static final String FUNC_TRANSFERFROM = "transferFrom";

    public static final String FUNC_TRANSFERFROMBATCH = "transferFromBatch";

    public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership";

    public static final String FUNC_UNFREEZECATEGORY = "unfreezeCategory";

    public static final String FUNC_UNFREEZEDAC = "unfreezeDAC";

    public static final Event APPROVAL_EVENT = new Event("Approval",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}));
    ;

    public static final Event APPROVALFORALL_EVENT = new Event("ApprovalForAll",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Bool>() {}));
    ;

    public static final Event BURN_EVENT = new Event("Burn",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}));
    ;

    public static final Event CREATECATEGORY_EVENT = new Event("CreateCategory",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event FREEZECATEGORY_EVENT = new Event("FreezeCategory",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}));
    ;

    public static final Event FREEZEDAC_EVENT = new Event("FreezeDAC",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}));
    ;

    public static final Event MINT_EVENT = new Event("Mint",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>() {}, new TypeReference<Uint256>(true) {}, new TypeReference<Uint256>(true) {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
    ;

    public static final Event TRANSFER_EVENT = new Event("Transfer",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event UNFREEZECATEGORY_EVENT = new Event("UnfreezeCategory",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}));
    ;

    public static final Event UNFREEZEDAC_EVENT = new Event("UnfreezeDAC",
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>(true) {}));
    ;

    protected BTSIDAC(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static String getABI() {
        return ABI;
    }

    public List<ApprovalEventResponse> getApprovalEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVAL_EVENT, transactionReceipt);
        ArrayList<ApprovalEventResponse> responses = new ArrayList<ApprovalEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApprovalEventResponse typedResponse = new ApprovalEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<ApprovalForAllEventResponse> getApprovalForAllEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVALFORALL_EVENT, transactionReceipt);
        ArrayList<ApprovalForAllEventResponse> responses = new ArrayList<ApprovalForAllEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApprovalForAllEventResponse typedResponse = new ApprovalForAllEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.isApproval = (Boolean) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<BurnEventResponse> getBurnEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(BURN_EVENT, transactionReceipt);
        ArrayList<BurnEventResponse> responses = new ArrayList<BurnEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            BurnEventResponse typedResponse = new BurnEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<CreateCategoryEventResponse> getCreateCategoryEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(CREATECATEGORY_EVENT, transactionReceipt);
        ArrayList<CreateCategoryEventResponse> responses = new ArrayList<CreateCategoryEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            CreateCategoryEventResponse typedResponse = new CreateCategoryEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.creator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.categoryName = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.metadata = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<FreezeCategoryEventResponse> getFreezeCategoryEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(FREEZECATEGORY_EVENT, transactionReceipt);
        ArrayList<FreezeCategoryEventResponse> responses = new ArrayList<FreezeCategoryEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            FreezeCategoryEventResponse typedResponse = new FreezeCategoryEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<FreezeDACEventResponse> getFreezeDACEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(FREEZEDAC_EVENT, transactionReceipt);
        ArrayList<FreezeDACEventResponse> responses = new ArrayList<FreezeDACEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            FreezeDACEventResponse typedResponse = new FreezeDACEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<MintEventResponse> getMintEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(MINT_EVENT, transactionReceipt);
        ArrayList<MintEventResponse> responses = new ArrayList<MintEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            MintEventResponse typedResponse = new MintEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.to = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.extData = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<OwnershipTransferredEventResponse> getOwnershipTransferredEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt);
        ArrayList<OwnershipTransferredEventResponse> responses = new ArrayList<OwnershipTransferredEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<TransferEventResponse> getTransferEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSFER_EVENT, transactionReceipt);
        ArrayList<TransferEventResponse> responses = new ArrayList<TransferEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            TransferEventResponse typedResponse = new TransferEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.to = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.extData = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<UnfreezeCategoryEventResponse> getUnfreezeCategoryEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(UNFREEZECATEGORY_EVENT, transactionReceipt);
        ArrayList<UnfreezeCategoryEventResponse> responses = new ArrayList<UnfreezeCategoryEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            UnfreezeCategoryEventResponse typedResponse = new UnfreezeCategoryEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<UnfreezeDACEventResponse> getUnfreezeDACEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(UNFREEZEDAC_EVENT, transactionReceipt);
        ArrayList<UnfreezeDACEventResponse> responses = new ArrayList<UnfreezeDACEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            UnfreezeDACEventResponse typedResponse = new UnfreezeDACEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public TransactionReceipt approve(String to, BigInteger DACID) {
        final Function function = new Function(
                FUNC_APPROVE,
                Arrays.<Type>asList(new Address(to),
                new Uint256(DACID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String approve(String to, BigInteger DACID, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVE,
                Arrays.<Type>asList(new Address(to),
                new Uint256(DACID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApprove(String to, BigInteger DACID) {
        final Function function = new Function(
                FUNC_APPROVE,
                Arrays.<Type>asList(new Address(to),
                new Uint256(DACID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getApproveInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue()
                );
    }

    public BigInteger balanceOf(String owner) throws ContractException {
        final Function function = new Function(FUNC_BALANCEOF,
                Arrays.<Type>asList(new Address(owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt burn(BigInteger DACID) {
        final Function function = new Function(
                FUNC_BURN,
                Arrays.<Type>asList(new Uint256(DACID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String burn(BigInteger DACID, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_BURN,
                Arrays.<Type>asList(new Uint256(DACID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForBurn(BigInteger DACID) {
        final Function function = new Function(
                FUNC_BURN,
                Arrays.<Type>asList(new Uint256(DACID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getBurnInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BURN,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt createCategory(String categoryName, String metadata) {
        final Function function = new Function(
                FUNC_CREATECATEGORY,
                Arrays.<Type>asList(new Utf8String(categoryName),
                new Utf8String(metadata)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String createCategory(String categoryName, String metadata,
            TransactionCallback callback) {
        final Function function = new Function(
                FUNC_CREATECATEGORY,
                Arrays.<Type>asList(new Utf8String(categoryName),
                new Utf8String(metadata)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForCreateCategory(String categoryName, String metadata) {
        final Function function = new Function(
                FUNC_CREATECATEGORY,
                Arrays.<Type>asList(new Utf8String(categoryName),
                new Utf8String(metadata)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getCreateCategoryInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_CREATECATEGORY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
                );
    }

    public TransactionReceipt freezeCategory(BigInteger categoryID) {
        final Function function = new Function(
                FUNC_FREEZECATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String freezeCategory(BigInteger categoryID, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_FREEZECATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForFreezeCategory(BigInteger categoryID) {
        final Function function = new Function(
                FUNC_FREEZECATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getFreezeCategoryInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_FREEZECATEGORY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt freezeDAC(List<BigInteger> DACIDs) {
        final Function function = new Function(
                FUNC_FREEZEDAC,
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String freezeDAC(List<BigInteger> DACIDs, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_FREEZEDAC,
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForFreezeDAC(List<BigInteger> DACIDs) {
        final Function function = new Function(
                FUNC_FREEZEDAC,
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple1<List<BigInteger>> getFreezeDACInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_FREEZEDAC,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<BigInteger>>(

                convertToNative((List<Uint256>) results.get(0).getValue())
                );
    }

    public String getApproved(BigInteger DACID) throws ContractException {
        final Function function = new Function(FUNC_GETAPPROVED,
                Arrays.<Type>asList(new Uint256(DACID)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple4<BigInteger, BigInteger, BigInteger, String> getDACByIndex(String owner,
            BigInteger index) throws ContractException {
        final Function function = new Function(FUNC_GETDACBYINDEX,
                Arrays.<Type>asList(new Address(owner),
                new Uint256(index)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<BigInteger, BigInteger, BigInteger, String>(
                (BigInteger) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (BigInteger) results.get(2).getValue(),
                (String) results.get(3).getValue());
    }

    public TransactionReceipt initialize() {
        final Function function = new Function(
                FUNC_INITIALIZE,
                Arrays.<Type>asList(),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String initialize(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INITIALIZE,
                Arrays.<Type>asList(),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInitialize() {
        final Function function = new Function(
                FUNC_INITIALIZE,
                Arrays.<Type>asList(),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Boolean isApprovedForAll(String owner, String operator) throws ContractException {
        final Function function = new Function(FUNC_ISAPPROVEDFORALL,
                Arrays.<Type>asList(new Address(owner),
                new Address(operator)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt mint(BigInteger categoryID, BigInteger amount, String to,
            String metadata) {
        final Function function = new Function(
                FUNC_MINT,
                Arrays.<Type>asList(new Uint256(categoryID),
                new Uint256(amount),
                new Address(to),
                new Utf8String(metadata)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String mint(BigInteger categoryID, BigInteger amount, String to, String metadata,
            TransactionCallback callback) {
        final Function function = new Function(
                FUNC_MINT,
                Arrays.<Type>asList(new Uint256(categoryID),
                new Uint256(amount),
                new Address(to),
                new Utf8String(metadata)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForMint(BigInteger categoryID, BigInteger amount, String to,
            String metadata) {
        final Function function = new Function(
                FUNC_MINT,
                Arrays.<Type>asList(new Uint256(categoryID),
                new Uint256(amount),
                new Address(to),
                new Utf8String(metadata)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple4<BigInteger, BigInteger, String, String> getMintInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_MINT,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<BigInteger, BigInteger, String, String>(

                (BigInteger) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                (String) results.get(3).getValue()
                );
    }

    public String owner() throws ContractException {
        final Function function = new Function(FUNC_OWNER,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple5<BigInteger, String, String, BigInteger, String> queryCategory(
            BigInteger categoryID) throws ContractException {
        final Function function = new Function(FUNC_QUERYCATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple5<BigInteger, String, String, BigInteger, String>(
                (BigInteger) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                (BigInteger) results.get(3).getValue(),
                (String) results.get(4).getValue());
    }

    public Tuple4<String, BigInteger, BigInteger, String> queryDAC(BigInteger DACID) throws
            ContractException {
        final Function function = new Function(FUNC_QUERYDAC,
                Arrays.<Type>asList(new Uint256(DACID)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<String, BigInteger, BigInteger, String>(
                (String) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (BigInteger) results.get(2).getValue(),
                (String) results.get(3).getValue());
    }

    public TransactionReceipt renounceOwnership() {
        final Function function = new Function(
                FUNC_RENOUNCEOWNERSHIP,
                Arrays.<Type>asList(),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String renounceOwnership(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_RENOUNCEOWNERSHIP,
                Arrays.<Type>asList(),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRenounceOwnership() {
        final Function function = new Function(
                FUNC_RENOUNCEOWNERSHIP,
                Arrays.<Type>asList(),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public TransactionReceipt setApprovalForAll(String to, Boolean isApproval) {
        final Function function = new Function(
                FUNC_SETAPPROVALFORALL,
                Arrays.<Type>asList(new Address(to),
                new Bool(isApproval)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String setApprovalForAll(String to, Boolean isApproval, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETAPPROVALFORALL,
                Arrays.<Type>asList(new Address(to),
                new Bool(isApproval)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSetApprovalForAll(String to, Boolean isApproval) {
        final Function function = new Function(
                FUNC_SETAPPROVALFORALL,
                Arrays.<Type>asList(new Address(to),
                new Bool(isApproval)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple2<String, Boolean> getSetApprovalForAllInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETAPPROVALFORALL,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Bool>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, Boolean>(

                (String) results.get(0).getValue(),
                (Boolean) results.get(1).getValue()
                );
    }

    public BigInteger totalSupply() throws ContractException {
        final Function function = new Function(FUNC_TOTALSUPPLY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public BigInteger totalSupplyOfCategory(BigInteger categoryID) throws ContractException {
        final Function function = new Function(FUNC_TOTALSUPPLYOFCATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt transferFrom(String from, String to, BigInteger DACID,
            String extData) {
        final Function function = new Function(
                FUNC_TRANSFERFROM,
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new Uint256(DACID),
                new Utf8String(extData)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String transferFrom(String from, String to, BigInteger DACID, String extData,
            TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFERFROM,
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new Uint256(DACID),
                new Utf8String(extData)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransferFrom(String from, String to, BigInteger DACID,
            String extData) {
        final Function function = new Function(
                FUNC_TRANSFERFROM,
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new Uint256(DACID),
                new Utf8String(extData)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, String> getTransferFromInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFERFROM,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (BigInteger) results.get(2).getValue(),
                (String) results.get(3).getValue()
                );
    }

    public TransactionReceipt transferFromBatch(String from, String to, List<BigInteger> DACIDs,
            String extData) {
        final Function function = new Function(
                FUNC_TRANSFERFROMBATCH,
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class)),
                new Utf8String(extData)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String transferFromBatch(String from, String to, List<BigInteger> DACIDs, String extData,
            TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFERFROMBATCH,
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class)),
                new Utf8String(extData)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransferFromBatch(String from, String to,
            List<BigInteger> DACIDs, String extData) {
        final Function function = new Function(
                FUNC_TRANSFERFROMBATCH,
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class)),
                new Utf8String(extData)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, List<BigInteger>, String> getTransferFromBatchInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFERFROMBATCH,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, List<BigInteger>, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                convertToNative((List<Uint256>) results.get(2).getValue()),
                (String) results.get(3).getValue()
                );
    }

    public TransactionReceipt transferOwnership(String newOwner) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String transferOwnership(String newOwner, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransferOwnership(String newOwner) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple1<String> getTransferOwnershipInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFEROWNERSHIP,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt unfreezeCategory(BigInteger categoryID) {
        final Function function = new Function(
                FUNC_UNFREEZECATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String unfreezeCategory(BigInteger categoryID, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UNFREEZECATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUnfreezeCategory(BigInteger categoryID) {
        final Function function = new Function(
                FUNC_UNFREEZECATEGORY,
                Arrays.<Type>asList(new Uint256(categoryID)),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getUnfreezeCategoryInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UNFREEZECATEGORY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt unfreezeDAC(List<BigInteger> DACIDs) {
        final Function function = new Function(
                FUNC_UNFREEZEDAC,
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return executeTransaction(function);
    }

    public String unfreezeDAC(List<BigInteger> DACIDs, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UNFREEZEDAC,
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUnfreezeDAC(List<BigInteger> DACIDs) {
        final Function function = new Function(
                FUNC_UNFREEZEDAC,
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        Uint256.class,
                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))),
                Collections.<TypeReference<?>>emptyList(), 0);
        return createSignedTransaction(function);
    }

    public Tuple1<List<BigInteger>> getUnfreezeDACInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UNFREEZEDAC,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<BigInteger>>(

                convertToNative((List<Uint256>) results.get(0).getValue())
                );
    }

    public static BTSIDAC load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new BTSIDAC(contractAddress, client, credential);
    }

    public static BTSIDAC deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(BTSIDAC.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), null, null);
    }

    public static class ApprovalEventResponse {
        public TransactionReceipt.Logs log;

        public String owner;

        public String operator;

        public BigInteger DACID;
    }

    public static class ApprovalForAllEventResponse {
        public TransactionReceipt.Logs log;

        public String owner;

        public String operator;

        public Boolean isApproval;
    }

    public static class BurnEventResponse {
        public TransactionReceipt.Logs log;

        public String owner;

        public BigInteger DACID;
    }

    public static class CreateCategoryEventResponse {
        public TransactionReceipt.Logs log;

        public String creator;

        public BigInteger categoryID;

        public String categoryName;

        public String metadata;
    }

    public static class FreezeCategoryEventResponse {
        public TransactionReceipt.Logs log;

        public String operator;

        public BigInteger categoryID;
    }

    public static class FreezeDACEventResponse {
        public TransactionReceipt.Logs log;

        public String operator;

        public BigInteger DACID;
    }

    public static class MintEventResponse {
        public TransactionReceipt.Logs log;

        public String from;

        public BigInteger categoryID;

        public BigInteger DACID;

        public String to;

        public String extData;
    }

    public static class OwnershipTransferredEventResponse {
        public TransactionReceipt.Logs log;

        public String previousOwner;

        public String newOwner;
    }

    public static class TransferEventResponse {
        public TransactionReceipt.Logs log;

        public String from;

        public String to;

        public BigInteger DACID;

        public String extData;
    }

    public static class UnfreezeCategoryEventResponse {
        public TransactionReceipt.Logs log;

        public String operator;

        public BigInteger categoryID;
    }

    public static class UnfreezeDACEventResponse {
        public TransactionReceipt.Logs log;

        public String operator;

        public BigInteger DACID;
    }
}
